const jwt = require('jsonwebtoken');
const utils = require('../utils/utils');
const sqlPool = require('../DB/sqlPool');

// JWT密钥（需要与controller中的相同）
const JWT_SECRET = 'h5_user_jwt_secret_key';

/**
 * H5用户认证中间件
 */
const h5Auth = async (req, res, next) => {
    try {
        // 获取token
        const token = req.headers['authorization']?.split(' ')[1] || req.query.token;
        
        if (!token) {
            return res.status(401).json(utils.ErrorResponse('未授权，请先登录'));
        }
        
        try {
            // 验证token
            const decoded = jwt.verify(token, JWT_SECRET);
            
            // 检查用户是否存在
            const { rows } = await sqlPool.queryData(
                `SELECT * FROM shequ_users WHERE id = ?`,
                [decoded.id]
            );
            
            if (!rows || rows.length === 0) {
                return res.status(401).json(utils.ErrorResponse('用户不存在'));
            }
            
            const user = rows[0];
            
            // 检查用户状态
            if (user.status !== 1) {
                return res.status(403).json(utils.ErrorResponse('账号已被禁用'));
            }
            
            // 将用户信息添加到请求对象
            req.user = {
                id: user.id,
                username: user.username,
                email: user.email,
                phone: user.phone
            };
            
            next();
        } catch (error) {
            if (error.name === 'TokenExpiredError') {
                return res.status(401).json(utils.ErrorResponse('登录已过期，请重新登录'));
            }
            
            return res.status(401).json(utils.ErrorResponse('无效的token，请重新登录'));
        }
    } catch (error) {
        console.error('认证失败:', error);
        return res.status(500).json(utils.ErrorResponse('服务器错误'));
    }
};

module.exports = h5Auth; 